# 整数规划题目：
# minimize  z = 40x + 90y
# constraint  9x + 7y <= 56, 7x + 20y >= 70
# x >= 0, y >= 0
# 求z的最小值，以及此时x和y的取值

import cvxpy as cp
from numpy import array

c = array([40, 90])  # 定义目标向量
a = array([[9, 7], [-7, -20]])  # 定义约束矩阵，7x + 20y >= 70 转换为 -7x + -20y <= 70
b = array([56, -70])  # 定义约束条件的右边向量
x = cp.Variable(2, integer=True)  # 定义两个整数决策变量向量，相当于 cp.Variable((2,), integer=True)
obj = cp.Minimize(c @ x)  # 构造目标函数，矩阵相乘，新版本建议用@符号，老版本用*
cons = [a @ x <= b, x >= 0]  # 构造约束条件constraint
prob = cp.Problem(obj, cons)  # 构建问题模型
prob.solve(solver='GLPK_MI', verbose=True)  # 求解问题，注意，需要安装 cvxopt包
print("最优值为:", prob.value)
print("最优解为：\n", x.value)
